home *** CD-ROM | disk | FTP | other *** search
/ Gigarom 1 / Gigarom Macintosh Archives (Quantum Leap)(CDRM1080320)(1993).iso / FILES / DEV / C-H / CSerialD.cpt / serialdemo.c
C/C++ Source or Header  |  1991-04-19  |  3KB  |  149 lines

  1. #include <stdio.h>
  2. #include <console.h>
  3. #include <SerialDvr.h>
  4.  
  5. #define ECHO FALSE
  6. #define OUTPUT_COOKED TRUE
  7. #define SERBUFSIZ 1000
  8.  
  9. #define XONCHAR 0x11
  10. #define XOFFCHAR 0x13
  11. #define BACKSPACECHAR 0x08
  12. #define ESCAPECHAR 0x1B
  13. #define DELETECHAR 0x7f
  14.  
  15. void introduction (void);
  16. OSErr serialinit(void);
  17. void serialwrite(void); 
  18. int serialcharsavail(void);
  19. void getserialchars(long );
  20. void displaybuff(long );
  21. void cleanup(void);
  22. char interpret (char);
  23.  
  24. int  ch;
  25. char *inbuf,*sermgrbuf;
  26.  
  27. main()
  28. {
  29.     OSErr err;
  30.     int count;
  31.     
  32.     introduction();
  33.     csetmode(C_RAW,stdout);/*  set up the console so it won't wait for input */
  34.     if ((err =serialinit()))  {
  35.         printf("the serial initializations have failed id %d",err);
  36.     }
  37.     else    
  38.     {
  39.         while (ch != ESCAPECHAR) 
  40.         {
  41.             ch =getchar();
  42.             if (ch > 0) 
  43.             {
  44.                 if (OUTPUT_COOKED) ch = interpret(ch);
  45.                 serialwrite();
  46.                 if (ECHO) putchar(ch);
  47.             }
  48.             if (count = serialcharsavail())
  49.             {
  50.                     getserialchars(count);
  51.                     displaybuff(count);
  52.             }
  53.         }
  54.     }
  55.     cleanup();
  56. }
  57.  
  58. void introduction()
  59. {            
  60.     printf(" this program reads and writes to them modem port at 2400 baud\n");
  61.     printf("it uses the 8bits 1 stop bit no parity\n");
  62.     printf("press <esc> key to exit\n");
  63. }
  64.  
  65. OSErr serialinit()
  66. {
  67.     OSErr     err;
  68.     SerShk flags;
  69.  
  70.     if ((err = RAMSDOpen(sPortA))) return err;
  71.     if ( (err = SerReset( AinRefNum,baud2400 + data8 + stop10 +noParity)))
  72.     {    RAMSDClose(sPortA);
  73.         return err;
  74.     }
  75.     
  76. /* give the serial manager a SERBUFSIZ buffer */
  77.     if (! (sermgrbuf = (char *)NewPtr (SERBUFSIZ))) {
  78.         err = SerSetBuf(AinRefNum, sermgrbuf, SERBUFSIZ);
  79.     }
  80.     if ( (err = SerReset( AoutRefNum,baud2400 + data8 + stop10 +noParity)))
  81.     {    RAMSDClose(sPortA);
  82.         return err;
  83.     }
  84.     
  85. /* set handshaking */
  86.     flags.fXOn = TRUE;
  87.     flags.fInX = TRUE;
  88.     flags.xOn = XONCHAR;
  89.     flags.xOff = XOFFCHAR;
  90.     if (( err = SerHShake(AinRefNum,&flags))){
  91.         RAMSDClose(sPortA);
  92.         return err;
  93.     }
  94.     
  95.     if (!( inbuf = (char *) NewPtr(SERBUFSIZ))) return MemError();
  96.     return 0; 
  97. }
  98.  
  99. void serialwrite()
  100. {
  101.     OSErr err;
  102.     char temp;
  103.     long num;
  104.     
  105.     num = 1;
  106.     temp = ch;
  107.     
  108.     err = FSWrite(AoutRefNum,  &num, &temp);
  109. }
  110.  
  111. int serialcharsavail()
  112. {
  113.     long count;
  114.     SerGetBuf(AinRefNum,&count);
  115.     return count;
  116. }
  117.  
  118. void getserialchars(long count)
  119. {
  120.     OSErr err;
  121.     
  122.     err = FSRead(AinRefNum,&count,inbuf);
  123. }
  124.  
  125. void displaybuff(long count)
  126. {
  127.      long i;
  128.      
  129.      for (i=0; i < count; putchar(inbuf[i++]));
  130. }
  131.      
  132. void cleanup()
  133. {
  134.     RAMSDClose(sPortA);
  135.     if (inbuf) DisposPtr(inbuf);
  136. }
  137.  
  138. char interpret(char ch)
  139. {
  140.     switch (ch)
  141.     {
  142. /* add your special cases here */
  143.         case BACKSPACECHAR:
  144.             return(DELETECHAR);
  145.         default:
  146.             return(ch);
  147.     }    
  148. }
  149.